package com.example.demo.mapper;

import com.example.demo.model.Active;
import com.example.demo.model.HealthFiles;
import com.example.demo.model.LoginUser;
import com.example.demo.model.Older;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: WJ
 * Date: 2023-02-17
 * Time: 21:31
 */
@Mapper
public interface OlderMapper {
    /**
     * 有 olderId 就根据id查,没有就查全部
     * @param olderId 老人id
     * @return 一个存放老人信息的list集合
     */
    List<LoginUser> getOlderList(@Param("olderid") Integer olderId);


    /**
     * 通过employeeId获取老人信息
     * @param employeeId     员工id
     * @return               老人信息列表
     */
    List<Older> getOlderListByEmployeeId(@Param("id") Integer employeeId);

    /**
     * 删除老人的信息(person)
     * @param id 老人id
     * @return   被影响的结果
     */
    Integer deleteOlderInPerson(Integer id);

    /**
     * 删除老人的信息
     * @param id  老人id
     * @return    被影响的结果
     */
    Integer deleteOlderInOlderDetail(Integer id);


    /**
     * 变更老人的上属员工
     * @param employeeId      员工id
     * @param olderId         老人id
     * @return                被影响的行数
     */
    Integer updateOlderTheEmployee(@Param("employeeid") Integer employeeId,
                                   @Param("olderid") Integer olderId);


    /**
     * 查询当前管理员下的所有老人信息(详细信息)
     * @return  老人的集合
     */
    List<Older> getAllOlderDetailInfo(Integer id);

    /**
     * 在后台管理系统中更新老人的信息（person）
     * @param id               id
     * @param username         用户名
     * @param sex              性别
     * @param age              年龄
     * @param phone            手机号
     */
    Integer updateOlderInfoInPerson(Integer id,
                                   String username,
                                   String sex,
                                   Integer age,
                                   String phone,
                                   String photo_url,
                                   String password);

    /**
     * 在后台管理系统中更新老人的信息（older_detail）
     * @param id               id
     * @param id_card          身份证
     * @param address          地址
     * @param clan             亲属
     * @param clan_phone       亲属联系方式
     * @param employee_id      负责员工
     * @param other_info       其他信息
     */
    Integer updateOlderInfoInOlderDetail(Integer id,
                                         String id_card,
                                         String address,
                                         String clan,
                                         String clan_phone,
                                         Integer employee_id,
                                         String other_info);

    /**
     * 获取所有老人的健康档案信息
     * @return     健康报告
     */
    List<HealthFiles> getAllOlderHealthFiles();

    /**
     * 删除健康档案信息
     * @param id   档案id
     * @return     被影响的行数
     */
    Integer deleteHealthFile(Integer id);


    /**
     * 修改健康档案
     * @param id                   id
     * @param employee_id          建档人
     * @param vaccination          疫苗次数
     * @param temperature          体温
     * @param height               身高
     * @param weight               体重
     * @param min_pressure         低压
     * @param respiratory_rate     呼吸频率
     * @param pulse                脉搏
     * @param electrocardiogram    心电图
     * @param high_pressure        高压
     * @return         结果
     */
    Integer updateHealthFile(Integer id,
                             Integer employee_id,
                             Integer vaccination,
                             Float temperature,
                             Integer height,
                             Float   weight,
                             Integer min_pressure,
                             Integer respiratory_rate,
                             Integer pulse,
                             String  electrocardiogram,
                             Integer high_pressure);

    /**
     * 根据条件查询（老人模块的查询）
     * @param adminId         上属管理员
     * @param username        用户名
     * @param phone           手机号
     * @param id_card         身份证
     * @param age             年龄
     */
    List<Older> getAllOlderInfoOnAdminDown(@Param("adminid") Integer adminId,
                                           String username,
                                           String phone,
                                           String id_card,
                                           Integer age);

    /**
     * 在person中添加老人信息
     * @param older   老人信息
     */
    Integer addOlderInfoInPerson(Older older);


    /**
     * 在older_detail中添加老人信息
     * @param older   老人信息
     */
    Integer addOlderInfoInOlderDetail(Older older);


    /**
     * 根据 低压 高压 的范围来查询老人健康档案信息
     * @param minMinPre     低压最小值
     * @param minMaxPre     低压最大值
     * @param maxMinPre     高压最小值
     * @param maxMaxPre     高压最大值
     */
    List<HealthFiles> getAllOlderHealthFilesBySelect(Integer minMinPre,
                                                     Integer minMaxPre,
                                                     Integer maxMinPre,
                                                     Integer maxMaxPre);

    /**
     * 通过老人id获取所有的健康档案信息
     * @param olderId 老人id
     */
    List<HealthFiles> getAllHealthByOlderId(@Param("id") Integer olderId);

    /**
     * 通过老人id查询老人的详情信息
     * @param id 老人id
     */
    Older getOlderAllInfo(Integer id);

    /**
     * 获取老人参加的所有活动信息
     * @param id    olderId
     */
    List<Active> getAllActiveIdByOlderId(Integer id);


    /**
     * 老人报名参加活动
     * @param active_id      活动id
     * @param active_name    活动名
     * @param older_id       老人id
     * @param older_name     老人名
     */
    Integer addJoinActiveForOlder(Integer active_id,
                                  String active_name,
                                  Integer older_id,
                                  String older_name);


    /**
     * 新增老人健康档案
     * @param older_id           老人id
     * @param temperature        体温
     * @param height             身高
     * @param weight             体重
     * @param respiratory_rate   呼吸频率
     * @param pulse              脉搏
     * @param min_pressure       低压
     * @param high_pressure      高压
     * @param electrocardiogram  心电图
     * @param vaccination        疫苗次数
     * @param employee_id        建档人id
     */
    Integer addOlderHealthFileInfo(Integer older_id,
                                   Float temperature,
                                   Integer height,
                                   Float weight,
                                   Integer respiratory_rate,
                                   Integer pulse,
                                   Integer min_pressure,
                                   Integer high_pressure,
                                   String electrocardiogram,
                                   Integer vaccination,
                                   Integer employee_id);
}
